home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr26 / memspd.zip / MEMSPD.DOC < prev    next >
Text File  |  1993-04-01  |  7KB  |  128 lines

  1. First, a few of warnings.  It is best to run MEMSPD without any TSRs or
  2. memory managers loaded.  If the 386 option is specified, MEMSPD will use
  3. 32-bit instructions, which will cause unpredictable effects if the CPU is
  4. not a 386 or 486.  The 386 option will also cause MEMSPD to attempt to go
  5. into protected mode to test extended memory if it thinks there is any.
  6. Most memory managers hide the extended memory from MEMSPD, but if they don't
  7. the attempt will fail with unknown results.
  8.  
  9. The purpose of MEMSPD is to give an indication of the relative speed of
  10. different areas of memory in a PC, to compare memory speeds of different
  11. computers, and to learn interesting facts about how memory and the CPU
  12. cache work.  It does this by timing a repeated string instruction (LODS)
  13. that copies memory to a register.  By making the repeat count be large
  14. (0x800) the time to execute the instructions to read the timer and set up
  15. the instruction becomes negligible and the result is very close to the
  16. actual time to execute each memory access.
  17.  
  18. MEMSPD uses the 8-bit and 16-bit forms of the LODS instruction to access
  19. memory (and the 32-bit form if -386 is specified).  It also does two
  20. accesses for each form - one in which it attempts to have the CPU cache
  21. filled with data other than what it is reading (all cache misses), and one
  22. in which it attempts to have the data already in the cache (all cache hits)
  23. For each access, the current time is read from timer 0, 0x800 accesses are
  24. made, the time is read again and the difference in microseconds is printed.
  25. If the difference between the cache-miss and cache-hit times is less than
  26. .04 it is assumed that the difference is due to experimental error and is
  27. not printed.
  28.  
  29. For best results, MEMSPD should not be run under any sort of memory
  30. manager, as they can hide extended memory or disturb the timings.  When
  31. the 386 option is specified, MEMSPD does not try to check to see if the
  32. CPU actually is a 386 or greater - unpredictable results will occur if this
  33. option is used with a 286 or below.  MEMSPD assumes that Timer 0 is being
  34. run in Mode 3 (the default for most BIOSs), but it is possible that a TSR
  35. or BIOS might run it in a different mode.  I would suggest doing a sanity
  36. check, such as is described below, to make sure your numbers make sense.
  37. On very slow machines (e.g. 8Mhz or less) the time it takes to do one
  38. repeated LODS may exceed the resolution of the timer giving wildly
  39. inaccurate numbers.
  40.  
  41. My Everex AGI 386-25 gives the following results:
  42.  
  43.   00000 - 9FFFF byte 0.24-0.33, word 0.24-0.42, dwrd 0.24-0.59
  44.   A0000 - B7FFF byte 0.76, word 0.76, dwrd 1.37
  45.   B8000 - BBFFF byte 2.09, word 1.78, dwrd 3.75
  46.   BC000 - BFFFF byte 2.05-1.92, word 2.17, dwrd 3.75
  47.   C0000 - C7FFF byte 0.76, word 0.76, dwrd 1.37
  48.   C8000 - DFFFF byte 1.18, word 2.19, dwrd 4.24
  49.   E0000 - EFFFF byte 0.76, word 0.76, dwrd 1.37
  50.   F0000 - FFFFF byte 0.24-0.33, word 0.24-0.42, dwrd 0.24-0.59
  51.   100000 - 43FFFF byte 0.24-0.33, word 0.24-0.42, dwrd 0.24-0.59
  52.  
  53. The following can be inferred from these numbers.
  54.  
  55.   1.  The memory from 0 - 9FFFF and F0000 and above is cached, since there are
  56.       two sets of numbers for each test.  Also, all of this memory is 32-bit
  57.       memory, since the access times for byte, word and dword are all the
  58.       same.
  59.  
  60.   2.  The memory from A0000 - B7FFF, which is VGA video memory, is 16-bit
  61.       since the byte and word times are the same but the 32-bit time is
  62.       greater (the byte and word operations each take one memory access but
  63.       the dword takes two).
  64.  
  65.   3.  The memory from B8000 - BFFFF is the video memory that is currently
  66.       being used.  The times for it vary wildly each time MEMSPD is run,
  67.       probably because the CPU access are often (and randomly) blocked
  68.       because the memory is being accessed by the video card to display
  69.       the screen.
  70.  
  71.   4.  The memory from C0000 - C7FFF is the video card ROM is 16-bit.
  72.  
  73.   5.  The memory from C8000 - DFFFF contains various other ROMS as well as
  74.       areas that are unused.  The times here, since they include areas for
  75.       which there is no memory, represent the basic bus byte access times.
  76.  
  77.   6.  The memory from F0000 - FFFFF is the BIOS.  The times shown are with
  78.       BIOS shadowing enabled, and are the same as the 32-bit memory.  If
  79.       BIOS shadowing is turned off, the times become:
  80.          byte 0.76, word 0.76, dwrd 1.37
  81.  
  82. Running MEMSPD with the CPU cache disabled gives the following:
  83.  
  84.   00000 - 9FFFF byte 0.24-0.33, word 0.24-0.42, dwrd 0.24-0.59
  85.   00000 - 9FFFF byte 0.42, word 0.42, dwrd 0.42
  86.  
  87. This points out a very interesting attribute of this machine's CPU cache -
  88. while cache hits are much faster than access without the cache, cache misses
  89. for word accesses are the same and cache misses for 32-bit accesses are much
  90. more expensive.
  91.  
  92. In order to determine if these numbers are reasonably accurate, I did the
  93. following computations:
  94.  
  95.   1.  A 25 MHz machine has a clock cycle time of .04 microseconds
  96.       (1/25,000,000).  The Intel 386 book shows that LODS takes 6
  97.       clocks per repeated operation, and in fact 6 * .04 is the .24
  98.       that MEMSPD reports for LODS with no wait states (cache hit).
  99.  
  100.   2.  According to the EISA spec (which is the closest thing I have to any
  101.       sort of documentation for the ISA bus), it takes 7 bus clocks to
  102.       access an 8-bit ISA slave.  An 8 MHz bus has .125 usec per cycle
  103.       (1/8,000,000), for a total of .875 usec.  Adding the .24 usec it takes
  104.       to access memory via LODS gives 1.115, which is very close to the
  105.       value of 1.18 gotten for the memory from C8000-DFFFF.
  106.  
  107. The IOB and IOW options test the access times for I/O accesses for byte and
  108. word accesses.  If IOW specifies a port address of either 1F0 or 170, and if
  109. MEMSPD thinks there is a disk controller at that address, it will start a
  110. read of the first sector and wait for DRQ to be asserted before doing the
  111. test.  I have discovered that some WD1003 compatible controllers will do
  112. 16-bit I/O cycles when the data register is read only if there is data to
  113. transfer, while other always assert it.  Doing the test only when the
  114. controller is transferring data insures that 16-bit transfers will be done.
  115. IOW with a port address of 170 or 1F0 should not be done if there is any
  116. kind of disk cache or other TSR loaded that does disk I/O, or corruption
  117. of disk data could occur.  Likewise, IOB and IOW should not be given the
  118. port address of an existing device if there is a TSR loaded that is using
  119. the device.
  120.  
  121. I have included all of the source files.  The assembler I used is a
  122. non-standard one that we use at work.  The C was compiled with a Metaware
  123. compiler.  MEMSPD was written very quickly and is neither pretty nor
  124. is the source documented very well.
  125.  
  126. Jack Jackson.   70152,3713
  127. 3/31/93
  128.